Terraformを始める Pt->2: State Files and Commands
パート1では、tfファイルの構成要素であるプロバイダとリソースについて調べました。このブログでは、Terraform を使う人にとって必須となる数々のコマンドを学びます。
また、Terraform の様々なstateファイルとその重要性についても学びます。
Apply, Create and Destroy
基本的なEC2インスタンスを起動するEC2.tfファイルを作ってみましょう。
provider "aws" { region = "us-west-2" access_key = "your-access-key" secret_key = "your-secret-key" } resource "aws_instance" "myFirstEc2Instance" { ami = "ami-0ca285d4c2cda3300" instance_type = "t2.micro" }
terraform plan
あらゆる作成の前に plan
コマンドを実行することは必須であり、推奨されるプラクティスです。このコマンドはTerraformが行う変更を知らせてくれます。それはリソースの追加、変更、破壊のいずれかです。Terraformが行った変更を本番環境で確認することを強くお勧めします。
terraform apply
Terraform の apply
は、その名の通り、指定されたコードに従ってリソースを実行(作成、変更)するものです。
Terraformは元々とても賢く、安全なので、もう一度計画を示して、実行するためにイエスかノーという形で承認を求めてきます。
terraform destroy
このコマンドは、いくつかの注意点を含んでおります
先に生成したインスタンスを破棄するには、terraform destroy を実行します。
destroyする際の厄介な点
同じファイルにバケットを追加して、terraform apply
を実行してみましょう。
resource "aws_s3_bucket" "b" { bucket = "terraform-s3-devIOblog-2022-bucket" tags = { Name = "for blog" Environment = "DevIO" } } resource "aws_s3_bucket_acl" "example" { bucket = aws_s3_bucket.b.id acl = "private" }
EC2インスタンスだけを削除し、s3バケットを削除しない場合はどうすればよいでしょうか。 すべてのリソースを削除してしまうので、このためにterraform destroy
を使用することはできません。
特定のリソースを削除するには、-target
フラグと resource.local_resource_name
と destroy
コマンドを使用する必要があります。
terraform destroy -target aws_instance.myFirstEc2Instance
Note:- 再度terraform plan
を実行すると、EC2がコードに残っているので、再びEC2インスタンスが追加されます。
特定のリソースを削除するもう一つの方法は、Terraformが無視すべきリソースのコードをコメントアウトすることです。
Terraform state file (.tfstate)
EC2コマンドを選択的に削除してからterraform planを実行すると、TerraformはEC2インスタンスの再作成を試みます。
これは、Terraformがリソースのstateを.tfstate.
というファイルに保存していることに起因しています。
TerraformはEC2インスタンスにstateがないことを発見すると、リソースの構築とstateファイルの更新を試みます。
terraform destroy
を実行すると、「.tfstate」ファイル内のデータが削除されます。
Note:- Terraformのstateファイルには、Terraform関連の情報だけでなく、EC2のIPアドレスやセキュリティグループなど、環境からの情報も含まれています。
Terraformの.tfstate
やそのバックアップファイルを編集(手動)したり変更したりしないことを強く推奨します。
まとめ
すべてのリソースを破壊するのではなく、選択的にリソースを破壊する必要がある状況は数多くあります。このような場合、-target
フラグが役に立ちます。
テラフォーム状態がどのように状態を維持するかを理解することは、インフラの状態がどのように管理されるかを知ることになります。